\chapter{Non-functional Requirements}

\section{Performance}
The application shall provide fast and uninterrupted access to Systems Design
students throughout an academic term. To ensure maximal service availability the
application shall accommodate 200 concurrent users, the maximum expected class
size of two full Systems Design Engineering classes. As well, the application
will also provide page-load times of under 1 second for 95\% of all operations.

\section{Web Application Frameworks}
A variety of web application frameworks are available to facilitate the process
of creating web applications and dynamic websites.  Django, Rails and Spring are
popular frameworks for the Python, Ruby and Java languages, respectively. Tables
\ref{tbl:frameworks} and \ref{tbl:frameworks2} compare the features of these
three frameworks.

\begin{table}[h]
\centering
\caption{Comparison of Web Frameworks}
\label{tbl:frameworks}
\vspace{6pt}
\begin{tabular}{llp{2.6cm}p{2.8cm}p{2.8cm}}
\toprule
Project	& Language & MVC framework & ORM
& Testing framework(s) \\
\toprule
Django~\cite{ref:djangobook}& Python & 	Yes & 	Django ORM & 	Yes\\
\midrule
Ruby on Rails~\cite{ref:rubybook} &  	Ruby  & 	ActiveRecord, Action Pack &  	ActiveRecord &
Unit Tests, Functional Tests and Integration Tests \\
\midrule
Spring~\cite{ref:springbook} &  	Java &	Yes &  	Hibernate, iBatis, etc \\
\bottomrule
\end{tabular}
\end{table}

\begin{table}[h]
\centering
\caption{Comparison of Web Frameworks (Cont'd)}
\label{tbl:frameworks2}
\vspace{6pt}
\begin{tabular}{p{1.6cm}p{2.8cm}p{2.8cm}p{2.8cm}p{3.6cm}}
\toprule
Project	& DB migration framework(s) & Security Framework(s) &
Template Framework(s) & Form Validation Framework(s) \\
\toprule
Django~\cite{ref:djangobook}& No (via plugin) & 	ACL-based & 	Yes &Yes \\
\midrule
Ruby on Rails~\cite{ref:rubybook} & Yes &  	Plug-in &  	Yes &  	Yes \\
\midrule
Spring~\cite{ref:springbook} & Hibernate, iBatis, etc &
Spring Security (formerly Acegi) & Commons Tiles, Velocity, etc. & Commons Validator\\
\bottomrule
\end{tabular}
\end{table}

From Tables \ref{tbl:frameworks} and \ref{tbl:frameworks2}, it can be seen that
the features of the three web frameworks are relatively similar--for the
purposes of the CEAB++ project. Ultimately, Django was used to develop the
project since it was with this framework that the group had the most collective
experience.  Further discussion on the use of web frameworks can be seen in
Section \ref{sec:ruby}.

\section{Maintainability}
To ensure a high degree of maintainability, the application shall be written
atop the Django web application framework. It is assumed that Django is a well
known platform, allowing other administrators or stake holders in the Systems
Department to extend or modify the application as the department's needs change
over time.

\section{Hardware Platform}
The application shall run by means of a Python interpreter, allowing the
application to run on any platform. Supported platforms shall include: i386 and
PowerPC.

\section{Supporting Software}
The application shall be operating-system independent by virtue of targeting the
Java VM. The application shall run on: Microsoft Windows, Ubuntu Linux and Mac
OS X.  As well, the application shall require a relational database system, such
as: MySQL, PostgreSQL or SQLite.
